#include <iostream>
#include "myArray.hpp"

using namespace std;

//实现一个通用的数组类，要求如下：
//1、可以对内置数据类型以及自定义数据类型的数据进行存储
//2、将数组中的数据存储到堆区
//3、构造函数中可以传入数组的容量
//4、提供对应的拷贝构造函数以及operator=防止浅拷贝问题
//5、提供尾插法和尾删法对数组中的数据进行增加和删除
//6、可以通过下标的方式访问数组中的元素
//7、可以获取数组中当前元素个数和数组的容量
void test1() {
    Arr<int> arr1(5);
    Arr<int> arr2(arr1);
    Arr<int> arr3(6);
    arr3 = arr1;
}

void test2() {
    Arr<int> arr(5);
    for (int i = 0; i < arr.getCapacity(); ++i) {
        arr.pushBack(i * i);
    }

    cout << "数组元素为：" << endl;
    for (int i = 0; i < arr.getSize(); ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
    cout << "arr的容量为:" << arr.getCapacity() << endl;
    cout << "arr的大小为:" << arr.getSize() << endl;
    arr.popBack();
    cout << "arr的容量为:" << arr.getCapacity() << endl;
    cout << "arr的大小为:" << arr.getSize() << endl;
}

class Person {
public:
    string name;
    int age;

    Person() {

    }

    Person(string name, int age) {
        this->name = name;
        this->age = age;
    }
};

void test3() {
    Arr<Person> pArr(10);//创建数组
    Person p1("孙悟空", 30);
    Person p2("韩信", 20);
    Person p3("妲己", 18);
    Person p4("王昭君", 15);
    Person p5("赵云", 24);
    //插入数据
    pArr.pushBack(p1);
    pArr.pushBack(p2);
    pArr.pushBack(p3);
    pArr.pushBack(p4);
    pArr.pushBack(p5);

    for (int i = 0; i < pArr.getSize(); ++i) {
        cout << "p:name:" << pArr[i].name << ",age:" << pArr[i].age << endl;
    }
    cout << "arr的容量为:" << pArr.getCapacity() << endl;
    cout << "arr的大小为:" << pArr.getSize() << endl;
}

int main() {
    //test1();
    test2();
    cout << "=========" << endl;
    test3();
    return 0;
}